goto exit_and_crash;
/* Pop and restore EAX (clobbered by hypercall). */
- if ( unlikely(__copy_from_user(®s->eax, (void __user *)regs->esp, 4)) )
+ if ( unlikely(__copy_from_user(®s->eax, (void *)regs->esp, 4)) )
goto exit_and_crash;
regs->esp += 4;
/* Pop and restore CS and EIP. */
- if ( unlikely(__copy_from_user(®s->eip, (void __user *)regs->esp, 8)) )
+ if ( unlikely(__copy_from_user(®s->eip, (void *)regs->esp, 8)) )
goto exit_and_crash;
regs->esp += 8;
* Pop, fix up and restore EFLAGS. We fix up in a local staging area
* to avoid firing the BUG_ON(IOPL) check in arch_get_info_guest.
*/
- if ( unlikely(__copy_from_user(&eflags, (void __user *)regs->esp, 4)) )
+ if ( unlikely(__copy_from_user(&eflags, (void *)regs->esp, 4)) )
goto exit_and_crash;
regs->esp += 4;
regs->eflags = (eflags & ~X86_EFLAGS_IOPL) | X86_EFLAGS_IF;
if ( vm86_mode(regs) )
{
/* Return to VM86 mode: pop and restore ESP,SS,ES,DS,FS and GS. */
- if ( __copy_from_user(®s->esp, (void __user *)regs->esp, 24) )
+ if ( __copy_from_user(®s->esp, (void *)regs->esp, 24) )
goto exit_and_crash;
}
else if ( unlikely(ring_0(regs)) )
else if ( !ring_1(regs) )
{
/* Return to ring 2/3: pop and restore ESP and SS. */
- if ( __copy_from_user(®s->esp, (void __user *)regs->esp, 8) )
+ if ( __copy_from_user(®s->esp, (void *)regs->esp, 8) )
goto exit_and_crash;
}
struct cpu_user_regs *regs = guest_cpu_user_regs();
u32 eflags;
+ /* Trim stack pointer to 32 bits. */
+ regs->rsp = (u32)regs->rsp;
+
/* Restore EAX (clobbered by hypercall). */
- if ( unlikely(__get_user(regs->_eax, (u32 __user *)regs->rsp)) )
+ if ( unlikely(__get_user(regs->_eax, (u32 *)regs->rsp)) )
goto exit_and_crash;
/* Restore CS and EIP. */
- if ( unlikely(__get_user(regs->_eip, (u32 __user *)regs->rsp + 1)) ||
- unlikely(__get_user(regs->cs, (u32 __user *)regs->rsp + 2)) )
+ if ( unlikely(__get_user(regs->_eip, (u32 *)regs->rsp + 1)) ||
+ unlikely(__get_user(regs->cs, (u32 *)regs->rsp + 2)) )
goto exit_and_crash;
/*
* Fix up and restore EFLAGS. We fix up in a local staging area
* to avoid firing the BUG_ON(IOPL) check in arch_get_info_guest.
*/
- if ( unlikely(__get_user(eflags, (u32 __user *)regs->rsp + 3)) )
+ if ( unlikely(__get_user(eflags, (u32 *)regs->rsp + 3)) )
goto exit_and_crash;
regs->_eflags = (eflags & ~X86_EFLAGS_IOPL) | X86_EFLAGS_IF;
{
for (i = 1; i < 10; ++i)
{
- rc |= __get_user(x, (u32 __user *)regs->rsp + i);
- rc |= __put_user(x, (u32 __user *)(unsigned long)ksp + i);
+ rc |= __get_user(x, (u32 *)regs->rsp + i);
+ rc |= __put_user(x, (u32 *)(unsigned long)ksp + i);
}
}
else if ( ksp > regs->_esp )
{
for (i = 9; i > 0; ++i)
{
- rc |= __get_user(x, (u32 __user *)regs->rsp + i);
- rc |= __put_user(x, (u32 __user *)(unsigned long)ksp + i);
+ rc |= __get_user(x, (u32 *)regs->rsp + i);
+ rc |= __put_user(x, (u32 *)(unsigned long)ksp + i);
}
}
if ( rc )
regs->_eflags = eflags & ~(X86_EFLAGS_VM|X86_EFLAGS_RF|
X86_EFLAGS_NT|X86_EFLAGS_TF);
- if ( unlikely(__put_user(0, (u32 __user *)regs->rsp)) )
+ if ( unlikely(__put_user(0, (u32 *)regs->rsp)) )
goto exit_and_crash;
regs->_eip = ti->address;
regs->cs = ti->cs;
else if ( !ring_1(regs) )
{
/* Return to ring 2/3: restore ESP and SS. */
- if ( __get_user(regs->ss, (u32 __user *)regs->rsp + 5)
- || __get_user(regs->_esp, (u32 __user *)regs->rsp + 4))
+ if ( __get_user(regs->ss, (u32 *)regs->rsp + 5)
+ || __get_user(regs->_esp, (u32 *)regs->rsp + 4))
goto exit_and_crash;
}
else